package chapter04.s03abstractclass;
//当定义一个类时，常常需要定义一些成员方法描述类的行为特征
// 但有时这些方法的实现方式是无法确定的。

// Java提供了 抽象方法 来满足这种需求。
//   抽象方法在定义时不需要实现方法体。
//   当一个类包含了抽象方法，该类必须是抽象类
// 抽象的含义：只有定义而无实现

// 规则：
// （1）包含一个以上抽象方法的类必须是抽象类。
// （2）抽象类和抽象方法都要使用abstract关键字声明。
// （3）抽象方法只需声明而不需要实现。
// （4）如果一个类继承了抽象类，那么该子类必须实现抽象类中的全部抽象方法。

// 定义抽象类Animal
abstract class Animal {
    // 定义抽象方法shout()
    abstract void shout();
}

// 定义Dog类继承抽象类Animal
class Dog extends Animal {
    // 实现抽象方法shout()
    void shout() {
        System.out.println("汪汪...");
    }
}

// 定义Cat类，继承抽象类Animal
class Cat extends Animal {
    @Override
    void shout() {
        System.out.println("喵喵喵...");
    }
}


// 定义测试类
public class Example10 {
    public static void main(String[] args) {
        Dog dog = new Dog();        // 创建Dog类的实例对象
        Cat cat = new Cat();

        Animal[] animals = {dog, cat};

        for (Animal animal : animals) {
            animal.shout();
        }
    }
}
